home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / winspool.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  51.4 KB  |  2,141 lines

  1. /*++
  2.  
  3. Copyright (c) 1990-1996  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     WinSpool.h
  8.  
  9. Abstract:
  10.  
  11.     Header file for Print APIs
  12.  
  13. Revision History:
  14.  
  15. --*/
  16.  
  17. #ifndef _WINSPOOL_
  18. #define _WINSPOOL_
  19. #pragma option push -b
  20.  
  21.  
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25.  
  26. #ifdef _WINUSER_
  27.  
  28. #include <prsht.h>
  29.  
  30. #endif
  31.  
  32. typedef struct _PRINTER_INFO_1A {
  33.     DWORD   Flags;
  34.     LPSTR   pDescription;
  35.     LPSTR   pName;
  36.     LPSTR   pComment;
  37. } PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;
  38. typedef struct _PRINTER_INFO_1W {
  39.     DWORD   Flags;
  40.     LPWSTR  pDescription;
  41.     LPWSTR  pName;
  42.     LPWSTR  pComment;
  43. } PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
  44. #ifdef UNICODE
  45. typedef PRINTER_INFO_1W PRINTER_INFO_1;
  46. typedef PPRINTER_INFO_1W PPRINTER_INFO_1;
  47. typedef LPPRINTER_INFO_1W LPPRINTER_INFO_1;
  48. #else
  49. typedef PRINTER_INFO_1A PRINTER_INFO_1;
  50. typedef PPRINTER_INFO_1A PPRINTER_INFO_1;
  51. typedef LPPRINTER_INFO_1A LPPRINTER_INFO_1;
  52. #endif // UNICODE
  53.  
  54. typedef struct _PRINTER_INFO_2A {
  55.     LPSTR     pServerName;
  56.     LPSTR     pPrinterName;
  57.     LPSTR     pShareName;
  58.     LPSTR     pPortName;
  59.     LPSTR     pDriverName;
  60.     LPSTR     pComment;
  61.     LPSTR     pLocation;
  62.     LPDEVMODEA pDevMode;
  63.     LPSTR     pSepFile;
  64.     LPSTR     pPrintProcessor;
  65.     LPSTR     pDatatype;
  66.     LPSTR     pParameters;
  67.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  68.     DWORD   Attributes;
  69.     DWORD   Priority;
  70.     DWORD   DefaultPriority;
  71.     DWORD   StartTime;
  72.     DWORD   UntilTime;
  73.     DWORD   Status;
  74.     DWORD   cJobs;
  75.     DWORD   AveragePPM;
  76. } PRINTER_INFO_2A, *PPRINTER_INFO_2A, *LPPRINTER_INFO_2A;
  77. typedef struct _PRINTER_INFO_2W {
  78.     LPWSTR    pServerName;
  79.     LPWSTR    pPrinterName;
  80.     LPWSTR    pShareName;
  81.     LPWSTR    pPortName;
  82.     LPWSTR    pDriverName;
  83.     LPWSTR    pComment;
  84.     LPWSTR    pLocation;
  85.     LPDEVMODEW pDevMode;
  86.     LPWSTR    pSepFile;
  87.     LPWSTR    pPrintProcessor;
  88.     LPWSTR    pDatatype;
  89.     LPWSTR    pParameters;
  90.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  91.     DWORD   Attributes;
  92.     DWORD   Priority;
  93.     DWORD   DefaultPriority;
  94.     DWORD   StartTime;
  95.     DWORD   UntilTime;
  96.     DWORD   Status;
  97.     DWORD   cJobs;
  98.     DWORD   AveragePPM;
  99. } PRINTER_INFO_2W, *PPRINTER_INFO_2W, *LPPRINTER_INFO_2W;
  100. #ifdef UNICODE
  101. typedef PRINTER_INFO_2W PRINTER_INFO_2;
  102. typedef PPRINTER_INFO_2W PPRINTER_INFO_2;
  103. typedef LPPRINTER_INFO_2W LPPRINTER_INFO_2;
  104. #else
  105. typedef PRINTER_INFO_2A PRINTER_INFO_2;
  106. typedef PPRINTER_INFO_2A PPRINTER_INFO_2;
  107. typedef LPPRINTER_INFO_2A LPPRINTER_INFO_2;
  108. #endif // UNICODE
  109.  
  110. typedef struct _PRINTER_INFO_3 {
  111.     PSECURITY_DESCRIPTOR pSecurityDescriptor;
  112. } PRINTER_INFO_3, *PPRINTER_INFO_3, *LPPRINTER_INFO_3;
  113.  
  114. typedef struct _PRINTER_INFO_4A {
  115.     LPSTR   pPrinterName;
  116.     LPSTR   pServerName;
  117.     DWORD   Attributes;
  118. } PRINTER_INFO_4A, *PPRINTER_INFO_4A, *LPPRINTER_INFO_4A;
  119. typedef struct _PRINTER_INFO_4W {
  120.     LPWSTR  pPrinterName;
  121.     LPWSTR  pServerName;
  122.     DWORD   Attributes;
  123. } PRINTER_INFO_4W, *PPRINTER_INFO_4W, *LPPRINTER_INFO_4W;
  124. #ifdef UNICODE
  125. typedef PRINTER_INFO_4W PRINTER_INFO_4;
  126. typedef PPRINTER_INFO_4W PPRINTER_INFO_4;
  127. typedef LPPRINTER_INFO_4W LPPRINTER_INFO_4;
  128. #else
  129. typedef PRINTER_INFO_4A PRINTER_INFO_4;
  130. typedef PPRINTER_INFO_4A PPRINTER_INFO_4;
  131. typedef LPPRINTER_INFO_4A LPPRINTER_INFO_4;
  132. #endif // UNICODE
  133.  
  134. typedef struct _PRINTER_INFO_5A {
  135.     LPSTR   pPrinterName;
  136.     LPSTR   pPortName;
  137.     DWORD   Attributes;
  138.     DWORD   DeviceNotSelectedTimeout;
  139.     DWORD   TransmissionRetryTimeout;
  140. } PRINTER_INFO_5A, *PPRINTER_INFO_5A, *LPPRINTER_INFO_5A;
  141. typedef struct _PRINTER_INFO_5W {
  142.     LPWSTR  pPrinterName;
  143.     LPWSTR  pPortName;
  144.     DWORD   Attributes;
  145.     DWORD   DeviceNotSelectedTimeout;
  146.     DWORD   TransmissionRetryTimeout;
  147. } PRINTER_INFO_5W, *PPRINTER_INFO_5W, *LPPRINTER_INFO_5W;
  148. #ifdef UNICODE
  149. typedef PRINTER_INFO_5W PRINTER_INFO_5;
  150. typedef PPRINTER_INFO_5W PPRINTER_INFO_5;
  151. typedef LPPRINTER_INFO_5W LPPRINTER_INFO_5;
  152. #else
  153. typedef PRINTER_INFO_5A PRINTER_INFO_5;
  154. typedef PPRINTER_INFO_5A PPRINTER_INFO_5;
  155. typedef LPPRINTER_INFO_5A LPPRINTER_INFO_5;
  156. #endif // UNICODE
  157.  
  158. typedef struct _PRINTER_INFO_6 {
  159.     DWORD   dwStatus;
  160. } PRINTER_INFO_6, *PPRINTER_INFO_6, *LPPRINTER_INFO_6;
  161.  
  162.  
  163.  
  164. #define PRINTER_CONTROL_PAUSE            1
  165. #define PRINTER_CONTROL_RESUME           2
  166. #define PRINTER_CONTROL_PURGE            3
  167. #define PRINTER_CONTROL_SET_STATUS       4
  168.  
  169. #define PRINTER_STATUS_PAUSED            0x00000001
  170. #define PRINTER_STATUS_ERROR             0x00000002
  171. #define PRINTER_STATUS_PENDING_DELETION  0x00000004
  172. #define PRINTER_STATUS_PAPER_JAM         0x00000008
  173. #define PRINTER_STATUS_PAPER_OUT         0x00000010
  174. #define PRINTER_STATUS_MANUAL_FEED       0x00000020
  175. #define PRINTER_STATUS_PAPER_PROBLEM     0x00000040
  176. #define PRINTER_STATUS_OFFLINE           0x00000080
  177. #define PRINTER_STATUS_IO_ACTIVE         0x00000100
  178. #define PRINTER_STATUS_BUSY              0x00000200
  179. #define PRINTER_STATUS_PRINTING          0x00000400
  180. #define PRINTER_STATUS_OUTPUT_BIN_FULL   0x00000800
  181. #define PRINTER_STATUS_NOT_AVAILABLE     0x00001000
  182. #define PRINTER_STATUS_WAITING           0x00002000
  183. #define PRINTER_STATUS_PROCESSING        0x00004000
  184. #define PRINTER_STATUS_INITIALIZING      0x00008000
  185. #define PRINTER_STATUS_WARMING_UP        0x00010000
  186. #define PRINTER_STATUS_TONER_LOW         0x00020000
  187. #define PRINTER_STATUS_NO_TONER          0x00040000
  188. #define PRINTER_STATUS_PAGE_PUNT         0x00080000
  189. #define PRINTER_STATUS_USER_INTERVENTION 0x00100000
  190. #define PRINTER_STATUS_OUT_OF_MEMORY     0x00200000
  191. #define PRINTER_STATUS_DOOR_OPEN         0x00400000
  192. #define PRINTER_STATUS_SERVER_UNKNOWN    0x00800000
  193. #define PRINTER_STATUS_POWER_SAVE        0x01000000
  194.  
  195.  
  196. #define PRINTER_ATTRIBUTE_QUEUED         0x00000001
  197. #define PRINTER_ATTRIBUTE_DIRECT         0x00000002
  198. #define PRINTER_ATTRIBUTE_DEFAULT        0x00000004
  199. #define PRINTER_ATTRIBUTE_SHARED         0x00000008
  200. #define PRINTER_ATTRIBUTE_NETWORK        0x00000010
  201. #define PRINTER_ATTRIBUTE_HIDDEN         0x00000020
  202. #define PRINTER_ATTRIBUTE_LOCAL          0x00000040
  203.  
  204. #define PRINTER_ATTRIBUTE_ENABLE_DEVQ       0x00000080
  205. #define PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS   0x00000100
  206. #define PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST 0x00000200
  207.  
  208. #define PRINTER_ATTRIBUTE_WORK_OFFLINE   0x00000400
  209. #define PRINTER_ATTRIBUTE_ENABLE_BIDI    0x00000800
  210. #define PRINTER_ATTRIBUTE_RAW_ONLY       0x00001000
  211.  
  212.  
  213. #define NO_PRIORITY   0
  214. #define MAX_PRIORITY 99
  215. #define MIN_PRIORITY  1
  216. #define DEF_PRIORITY  1
  217.  
  218. typedef struct _JOB_INFO_1A {
  219.    DWORD    JobId;
  220.    LPSTR      pPrinterName;
  221.    LPSTR      pMachineName;
  222.    LPSTR      pUserName;
  223.    LPSTR      pDocument;
  224.    LPSTR      pDatatype;
  225.    LPSTR      pStatus;
  226.    DWORD    Status;
  227.    DWORD    Priority;
  228.    DWORD    Position;
  229.    DWORD    TotalPages;
  230.    DWORD    PagesPrinted;
  231.    SYSTEMTIME Submitted;
  232. } JOB_INFO_1A, *PJOB_INFO_1A, *LPJOB_INFO_1A;
  233. typedef struct _JOB_INFO_1W {
  234.    DWORD    JobId;
  235.    LPWSTR     pPrinterName;
  236.    LPWSTR     pMachineName;
  237.    LPWSTR     pUserName;
  238.    LPWSTR     pDocument;
  239.    LPWSTR     pDatatype;
  240.    LPWSTR     pStatus;
  241.    DWORD    Status;
  242.    DWORD    Priority;
  243.    DWORD    Position;
  244.    DWORD    TotalPages;
  245.    DWORD    PagesPrinted;
  246.    SYSTEMTIME Submitted;
  247. } JOB_INFO_1W, *PJOB_INFO_1W, *LPJOB_INFO_1W;
  248. #ifdef UNICODE
  249. typedef JOB_INFO_1W JOB_INFO_1;
  250. typedef PJOB_INFO_1W PJOB_INFO_1;
  251. typedef LPJOB_INFO_1W LPJOB_INFO_1;
  252. #else
  253. typedef JOB_INFO_1A JOB_INFO_1;
  254. typedef PJOB_INFO_1A PJOB_INFO_1;
  255. typedef LPJOB_INFO_1A LPJOB_INFO_1;
  256. #endif // UNICODE
  257.  
  258. typedef struct _JOB_INFO_2A {
  259.    DWORD    JobId;
  260.    LPSTR      pPrinterName;
  261.    LPSTR      pMachineName;
  262.    LPSTR      pUserName;
  263.    LPSTR      pDocument;
  264.    LPSTR      pNotifyName;
  265.    LPSTR      pDatatype;
  266.    LPSTR      pPrintProcessor;
  267.    LPSTR      pParameters;
  268.    LPSTR      pDriverName;
  269.    LPDEVMODEA pDevMode;
  270.    LPSTR      pStatus;
  271.    PSECURITY_DESCRIPTOR pSecurityDescriptor;
  272.    DWORD    Status;
  273.    DWORD    Priority;
  274.    DWORD    Position;
  275.    DWORD    StartTime;
  276.    DWORD    UntilTime;
  277.    DWORD    TotalPages;
  278.    DWORD    Size;
  279.    SYSTEMTIME Submitted;    // Time the job was spooled
  280.    DWORD    Time;           // How many seconds the job has been printing
  281.    DWORD    PagesPrinted;
  282. } JOB_INFO_2A, *PJOB_INFO_2A, *LPJOB_INFO_2A;
  283. typedef struct _JOB_INFO_2W {
  284.    DWORD    JobId;
  285.    LPWSTR     pPrinterName;
  286.    LPWSTR     pMachineName;
  287.    LPWSTR     pUserName;
  288.    LPWSTR     pDocument;
  289.    LPWSTR     pNotifyName;
  290.    LPWSTR     pDatatype;
  291.    LPWSTR     pPrintProcessor;
  292.    LPWSTR     pParameters;
  293.    LPWSTR     pDriverName;
  294.    LPDEVMODEW pDevMode;
  295.    LPWSTR     pStatus;
  296.    PSECURITY_DESCRIPTOR pSecurityDescriptor;
  297.    DWORD    Status;
  298.    DWORD    Priority;
  299.    DWORD    Position;
  300.    DWORD    StartTime;
  301.    DWORD    UntilTime;
  302.    DWORD    TotalPages;
  303.    DWORD    Size;
  304.    SYSTEMTIME Submitted;    // Time the job was spooled
  305.    DWORD    Time;           // How many seconds the job has been printing
  306.    DWORD    PagesPrinted;
  307. } JOB_INFO_2W, *PJOB_INFO_2W, *LPJOB_INFO_2W;
  308. #ifdef UNICODE
  309. typedef JOB_INFO_2W JOB_INFO_2;
  310. typedef PJOB_INFO_2W PJOB_INFO_2;
  311. typedef LPJOB_INFO_2W LPJOB_INFO_2;
  312. #else
  313. typedef JOB_INFO_2A JOB_INFO_2;
  314. typedef PJOB_INFO_2A PJOB_INFO_2;
  315. typedef LPJOB_INFO_2A LPJOB_INFO_2;
  316. #endif // UNICODE
  317.  
  318. typedef struct _JOB_INFO_3 {
  319.     DWORD   JobId;
  320.     DWORD   NextJobId;
  321.     DWORD   Reserved;
  322. } JOB_INFO_3, *PJOB_INFO_3, *LPJOB_INFO_3;
  323.  
  324. #define JOB_CONTROL_PAUSE              1
  325. #define JOB_CONTROL_RESUME             2
  326. #define JOB_CONTROL_CANCEL             3
  327. #define JOB_CONTROL_RESTART            4
  328. #define JOB_CONTROL_DELETE             5
  329. #define JOB_CONTROL_SENT_TO_PRINTER    6
  330. #define JOB_CONTROL_LAST_PAGE_EJECTED  7
  331.  
  332. #define JOB_STATUS_PAUSED               0x00000001
  333. #define JOB_STATUS_ERROR                0x00000002
  334. #define JOB_STATUS_DELETING             0x00000004
  335. #define JOB_STATUS_SPOOLING             0x00000008
  336. #define JOB_STATUS_PRINTING             0x00000010
  337. #define JOB_STATUS_OFFLINE              0x00000020
  338. #define JOB_STATUS_PAPEROUT             0x00000040
  339. #define JOB_STATUS_PRINTED              0x00000080
  340. #define JOB_STATUS_DELETED              0x00000100
  341. #define JOB_STATUS_BLOCKED_DEVQ         0x00000200
  342. #define JOB_STATUS_USER_INTERVENTION    0x00000400
  343. #define JOB_STATUS_RESTART              0x00000800
  344.  
  345. #define JOB_POSITION_UNSPECIFIED       0
  346.  
  347. typedef struct _ADDJOB_INFO_1A {
  348.     LPSTR     Path;
  349.     DWORD   JobId;
  350. } ADDJOB_INFO_1A, *PADDJOB_INFO_1A, *LPADDJOB_INFO_1A;
  351. typedef struct _ADDJOB_INFO_1W {
  352.     LPWSTR    Path;
  353.     DWORD   JobId;
  354. } ADDJOB_INFO_1W, *PADDJOB_INFO_1W, *LPADDJOB_INFO_1W;
  355. #ifdef UNICODE
  356. typedef ADDJOB_INFO_1W ADDJOB_INFO_1;
  357. typedef PADDJOB_INFO_1W PADDJOB_INFO_1;
  358. typedef LPADDJOB_INFO_1W LPADDJOB_INFO_1;
  359. #else
  360. typedef ADDJOB_INFO_1A ADDJOB_INFO_1;
  361. typedef PADDJOB_INFO_1A PADDJOB_INFO_1;
  362. typedef LPADDJOB_INFO_1A LPADDJOB_INFO_1;
  363. #endif // UNICODE
  364.  
  365. typedef struct _DRIVER_INFO_1A {
  366.     LPSTR     pName;              // QMS 810
  367. } DRIVER_INFO_1A, *PDRIVER_INFO_1A, *LPDRIVER_INFO_1A;
  368. typedef struct _DRIVER_INFO_1W {
  369.     LPWSTR    pName;              // QMS 810
  370. } DRIVER_INFO_1W, *PDRIVER_INFO_1W, *LPDRIVER_INFO_1W;
  371. #ifdef UNICODE
  372. typedef DRIVER_INFO_1W DRIVER_INFO_1;
  373. typedef PDRIVER_INFO_1W PDRIVER_INFO_1;
  374. typedef LPDRIVER_INFO_1W LPDRIVER_INFO_1;
  375. #else
  376. typedef DRIVER_INFO_1A DRIVER_INFO_1;
  377. typedef PDRIVER_INFO_1A PDRIVER_INFO_1;
  378. typedef LPDRIVER_INFO_1A LPDRIVER_INFO_1;
  379. #endif // UNICODE
  380.  
  381. typedef struct _DRIVER_INFO_2A {
  382.     DWORD   cVersion;
  383.     LPSTR     pName;              // QMS 810
  384.     LPSTR     pEnvironment;       // Win32 x86
  385.     LPSTR     pDriverPath;        // c:\drivers\pscript.dll
  386.     LPSTR     pDataFile;          // c:\drivers\QMS810.PPD
  387.     LPSTR     pConfigFile;        // c:\drivers\PSCRPTUI.DLL
  388. } DRIVER_INFO_2A, *PDRIVER_INFO_2A, *LPDRIVER_INFO_2A;
  389. typedef struct _DRIVER_INFO_2W {
  390.     DWORD   cVersion;
  391.     LPWSTR    pName;              // QMS 810
  392.     LPWSTR    pEnvironment;       // Win32 x86
  393.     LPWSTR    pDriverPath;        // c:\drivers\pscript.dll
  394.     LPWSTR    pDataFile;          // c:\drivers\QMS810.PPD
  395.     LPWSTR    pConfigFile;        // c:\drivers\PSCRPTUI.DLL
  396. } DRIVER_INFO_2W, *PDRIVER_INFO_2W, *LPDRIVER_INFO_2W;
  397. #ifdef UNICODE
  398. typedef DRIVER_INFO_2W DRIVER_INFO_2;
  399. typedef PDRIVER_INFO_2W PDRIVER_INFO_2;
  400. typedef LPDRIVER_INFO_2W LPDRIVER_INFO_2;
  401. #else
  402. typedef DRIVER_INFO_2A DRIVER_INFO_2;
  403. typedef PDRIVER_INFO_2A PDRIVER_INFO_2;
  404. typedef LPDRIVER_INFO_2A LPDRIVER_INFO_2;
  405. #endif // UNICODE
  406.  
  407. typedef struct _DRIVER_INFO_3A {
  408.     DWORD   cVersion;
  409.     LPSTR     pName;                    // QMS 810
  410.     LPSTR     pEnvironment;             // Win32 x86
  411.     LPSTR     pDriverPath;              // c:\drivers\pscript.dll
  412.     LPSTR     pDataFile;                // c:\drivers\QMS810.PPD
  413.     LPSTR     pConfigFile;              // c:\drivers\PSCRPTUI.DLL
  414.     LPSTR     pHelpFile;                // c:\drivers\PSCRPTUI.HLP
  415.     LPSTR     pDependentFiles;          // PSCRIPT.DLL\0QMS810.PPD\0PSCRIPTUI.DLL\0PSCRIPTUI.HLP\0PSTEST.TXT\0\0
  416.     LPSTR     pMonitorName;             // "PJL monitor"
  417.     LPSTR     pDefaultDataType;         // "EMF"
  418. } DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;
  419. typedef struct _DRIVER_INFO_3W {
  420.     DWORD   cVersion;
  421.     LPWSTR    pName;                    // QMS 810
  422.     LPWSTR    pEnvironment;             // Win32 x86
  423.     LPWSTR    pDriverPath;              // c:\drivers\pscript.dll
  424.     LPWSTR    pDataFile;                // c:\drivers\QMS810.PPD
  425.     LPWSTR    pConfigFile;              // c:\drivers\PSCRPTUI.DLL
  426.     LPWSTR    pHelpFile;                // c:\drivers\PSCRPTUI.HLP
  427.     LPWSTR    pDependentFiles;          // PSCRIPT.DLL\0QMS810.PPD\0PSCRIPTUI.DLL\0PSCRIPTUI.HLP\0PSTEST.TXT\0\0
  428.     LPWSTR    pMonitorName;             // "PJL monitor"
  429.     LPWSTR    pDefaultDataType;         // "EMF"
  430. } DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;
  431. #ifdef UNICODE
  432. typedef DRIVER_INFO_3W DRIVER_INFO_3;
  433. typedef PDRIVER_INFO_3W PDRIVER_INFO_3;
  434. typedef LPDRIVER_INFO_3W LPDRIVER_INFO_3;
  435. #else
  436. typedef DRIVER_INFO_3A DRIVER_INFO_3;
  437. typedef PDRIVER_INFO_3A PDRIVER_INFO_3;
  438. typedef LPDRIVER_INFO_3A LPDRIVER_INFO_3;
  439. #endif // UNICODE
  440.  
  441. typedef struct _DOC_INFO_1A {
  442.     LPSTR     pDocName;
  443.     LPSTR     pOutputFile;
  444.     LPSTR     pDatatype;
  445. } DOC_INFO_1A, *PDOC_INFO_1A, *LPDOC_INFO_1A;
  446. typedef struct _DOC_INFO_1W {
  447.     LPWSTR    pDocName;
  448.     LPWSTR    pOutputFile;
  449.     LPWSTR    pDatatype;
  450. } DOC_INFO_1W, *PDOC_INFO_1W, *LPDOC_INFO_1W;
  451. #ifdef UNICODE
  452. typedef DOC_INFO_1W DOC_INFO_1;
  453. typedef PDOC_INFO_1W PDOC_INFO_1;
  454. typedef LPDOC_INFO_1W LPDOC_INFO_1;
  455. #else
  456. typedef DOC_INFO_1A DOC_INFO_1;
  457. typedef PDOC_INFO_1A PDOC_INFO_1;
  458. typedef LPDOC_INFO_1A LPDOC_INFO_1;
  459. #endif // UNICODE
  460.  
  461. typedef struct _FORM_INFO_1A {
  462.     DWORD   Flags;
  463.     LPSTR     pName;
  464.     SIZEL   Size;
  465.     RECTL   ImageableArea;
  466. } FORM_INFO_1A, *PFORM_INFO_1A, *LPFORM_INFO_1A;
  467. typedef struct _FORM_INFO_1W {
  468.     DWORD   Flags;
  469.     LPWSTR    pName;
  470.     SIZEL   Size;
  471.     RECTL   ImageableArea;
  472. } FORM_INFO_1W, *PFORM_INFO_1W, *LPFORM_INFO_1W;
  473. #ifdef UNICODE
  474. typedef FORM_INFO_1W FORM_INFO_1;
  475. typedef PFORM_INFO_1W PFORM_INFO_1;
  476. typedef LPFORM_INFO_1W LPFORM_INFO_1;
  477. #else
  478. typedef FORM_INFO_1A FORM_INFO_1;
  479. typedef PFORM_INFO_1A PFORM_INFO_1;
  480. typedef LPFORM_INFO_1A LPFORM_INFO_1;
  481. #endif // UNICODE
  482.  
  483. typedef struct _DOC_INFO_2A {
  484.     LPSTR     pDocName;
  485.     LPSTR     pOutputFile;
  486.     LPSTR     pDatatype;
  487.     DWORD   dwMode;
  488.     DWORD   JobId;
  489. } DOC_INFO_2A, *PDOC_INFO_2A, *LPDOC_INFO_2A;
  490. typedef struct _DOC_INFO_2W {
  491.     LPWSTR    pDocName;
  492.     LPWSTR    pOutputFile;
  493.     LPWSTR    pDatatype;
  494.     DWORD   dwMode;
  495.     DWORD   JobId;
  496. } DOC_INFO_2W, *PDOC_INFO_2W, *LPDOC_INFO_2W;
  497. #ifdef UNICODE
  498. typedef DOC_INFO_2W DOC_INFO_2;
  499. typedef PDOC_INFO_2W PDOC_INFO_2;
  500. typedef LPDOC_INFO_2W LPDOC_INFO_2;
  501. #else
  502. typedef DOC_INFO_2A DOC_INFO_2;
  503. typedef PDOC_INFO_2A PDOC_INFO_2;
  504. typedef LPDOC_INFO_2A LPDOC_INFO_2;
  505. #endif // UNICODE
  506.  
  507. #define DI_CHANNEL              1    // start direct read/write channel,
  508.  
  509.  
  510. #define DI_READ_SPOOL_JOB       3
  511.  
  512.  
  513. #define FORM_USER       0x00000000
  514. #define FORM_BUILTIN    0x00000001
  515. #define FORM_PRINTER    0x00000002
  516.  
  517. typedef struct _PRINTPROCESSOR_INFO_1A {
  518.     LPSTR     pName;
  519. } PRINTPROCESSOR_INFO_1A, *PPRINTPROCESSOR_INFO_1A, *LPPRINTPROCESSOR_INFO_1A;
  520. typedef struct _PRINTPROCESSOR_INFO_1W {
  521.     LPWSTR    pName;
  522. } PRINTPROCESSOR_INFO_1W, *PPRINTPROCESSOR_INFO_1W, *LPPRINTPROCESSOR_INFO_1W;
  523. #ifdef UNICODE
  524. typedef PRINTPROCESSOR_INFO_1W PRINTPROCESSOR_INFO_1;
  525. typedef PPRINTPROCESSOR_INFO_1W PPRINTPROCESSOR_INFO_1;
  526. typedef LPPRINTPROCESSOR_INFO_1W LPPRINTPROCESSOR_INFO_1;
  527. #else
  528. typedef PRINTPROCESSOR_INFO_1A PRINTPROCESSOR_INFO_1;
  529. typedef PPRINTPROCESSOR_INFO_1A PPRINTPROCESSOR_INFO_1;
  530. typedef LPPRINTPROCESSOR_INFO_1A LPPRINTPROCESSOR_INFO_1;
  531. #endif // UNICODE
  532.  
  533. typedef struct _PORT_INFO_1A {
  534.     LPSTR     pName;
  535. } PORT_INFO_1A, *PPORT_INFO_1A, *LPPORT_INFO_1A;
  536. typedef struct _PORT_INFO_1W {
  537.     LPWSTR    pName;
  538. } PORT_INFO_1W, *PPORT_INFO_1W, *LPPORT_INFO_1W;
  539. #ifdef UNICODE
  540. typedef PORT_INFO_1W PORT_INFO_1;
  541. typedef PPORT_INFO_1W PPORT_INFO_1;
  542. typedef LPPORT_INFO_1W LPPORT_INFO_1;
  543. #else
  544. typedef PORT_INFO_1A PORT_INFO_1;
  545. typedef PPORT_INFO_1A PPORT_INFO_1;
  546. typedef LPPORT_INFO_1A LPPORT_INFO_1;
  547. #endif // UNICODE
  548.  
  549. typedef struct _PORT_INFO_2A {
  550.     LPSTR     pPortName;
  551.     LPSTR     pMonitorName;
  552.     LPSTR     pDescription;
  553.     DWORD     fPortType;
  554.     DWORD     Reserved;
  555. } PORT_INFO_2A, *PPORT_INFO_2A, *LPPORT_INFO_2A;
  556. typedef struct _PORT_INFO_2W {
  557.     LPWSTR    pPortName;
  558.     LPWSTR    pMonitorName;
  559.     LPWSTR    pDescription;
  560.     DWORD     fPortType;
  561.     DWORD     Reserved;
  562. } PORT_INFO_2W, *PPORT_INFO_2W, *LPPORT_INFO_2W;
  563. #ifdef UNICODE
  564. typedef PORT_INFO_2W PORT_INFO_2;
  565. typedef PPORT_INFO_2W PPORT_INFO_2;
  566. typedef LPPORT_INFO_2W LPPORT_INFO_2;
  567. #else
  568. typedef PORT_INFO_2A PORT_INFO_2;
  569. typedef PPORT_INFO_2A PPORT_INFO_2;
  570. typedef LPPORT_INFO_2A LPPORT_INFO_2;
  571. #endif // UNICODE
  572.  
  573. #define PORT_TYPE_WRITE         0x0001
  574. #define PORT_TYPE_READ          0x0002
  575. #define PORT_TYPE_REDIRECTED    0x0004
  576. #define PORT_TYPE_NET_ATTACHED  0x0008
  577.  
  578. typedef struct _PORT_INFO_3A {
  579.     DWORD   dwStatus;
  580.     LPSTR   pszStatus;
  581.     DWORD   dwSeverity;
  582. } PORT_INFO_3A, *PPORT_INFO_3A, *LPPORT_INFO_3A;
  583. typedef struct _PORT_INFO_3W {
  584.     DWORD   dwStatus;
  585.     LPWSTR  pszStatus;
  586.     DWORD   dwSeverity;
  587. } PORT_INFO_3W, *PPORT_INFO_3W, *LPPORT_INFO_3W;
  588. #ifdef UNICODE
  589. typedef PORT_INFO_3W PORT_INFO_3;
  590. typedef PPORT_INFO_3W PPORT_INFO_3;
  591. typedef LPPORT_INFO_3W LPPORT_INFO_3;
  592. #else
  593. typedef PORT_INFO_3A PORT_INFO_3;
  594. typedef PPORT_INFO_3A PPORT_INFO_3;
  595. typedef LPPORT_INFO_3A LPPORT_INFO_3;
  596. #endif // UNICODE
  597.  
  598. #define PORT_STATUS_TYPE_ERROR      1
  599. #define PORT_STATUS_TYPE_WARNING    2
  600. #define PORT_STATUS_TYPE_INFO       3
  601.  
  602. #define     PORT_STATUS_OFFLINE                 1
  603. #define     PORT_STATUS_PAPER_JAM               2
  604. #define     PORT_STATUS_PAPER_OUT               3
  605. #define     PORT_STATUS_OUTPUT_BIN_FULL         4
  606. #define     PORT_STATUS_PAPER_PROBLEM           5
  607. #define     PORT_STATUS_NO_TONER                6
  608. #define     PORT_STATUS_DOOR_OPEN               7
  609. #define     PORT_STATUS_USER_INTERVENTION       8
  610. #define     PORT_STATUS_OUT_OF_MEMORY           9
  611.  
  612. #define     PORT_STATUS_TONER_LOW              10
  613.  
  614. #define     PORT_STATUS_WARMING_UP             11
  615. #define     PORT_STATUS_POWER_SAVE             12
  616.  
  617.  
  618. typedef struct _MONITOR_INFO_1A{
  619.     LPSTR     pName;
  620. } MONITOR_INFO_1A, *PMONITOR_INFO_1A, *LPMONITOR_INFO_1A;
  621. typedef struct _MONITOR_INFO_1W{
  622.     LPWSTR    pName;
  623. } MONITOR_INFO_1W, *PMONITOR_INFO_1W, *LPMONITOR_INFO_1W;
  624. #ifdef UNICODE
  625. typedef MONITOR_INFO_1W MONITOR_INFO_1;
  626. typedef PMONITOR_INFO_1W PMONITOR_INFO_1;
  627. typedef LPMONITOR_INFO_1W LPMONITOR_INFO_1;
  628. #else
  629. typedef MONITOR_INFO_1A MONITOR_INFO_1;
  630. typedef PMONITOR_INFO_1A PMONITOR_INFO_1;
  631. typedef LPMONITOR_INFO_1A LPMONITOR_INFO_1;
  632. #endif // UNICODE
  633.  
  634. typedef struct _MONITOR_INFO_2A{
  635.     LPSTR     pName;
  636.     LPSTR     pEnvironment;
  637.     LPSTR     pDLLName;
  638. } MONITOR_INFO_2A, *PMONITOR_INFO_2A, *LPMONITOR_INFO_2A;
  639. typedef struct _MONITOR_INFO_2W{
  640.     LPWSTR    pName;
  641.     LPWSTR    pEnvironment;
  642.     LPWSTR    pDLLName;
  643. } MONITOR_INFO_2W, *PMONITOR_INFO_2W, *LPMONITOR_INFO_2W;
  644. #ifdef UNICODE
  645. typedef MONITOR_INFO_2W MONITOR_INFO_2;
  646. typedef PMONITOR_INFO_2W PMONITOR_INFO_2;
  647. typedef LPMONITOR_INFO_2W LPMONITOR_INFO_2;
  648. #else
  649. typedef MONITOR_INFO_2A MONITOR_INFO_2;
  650. typedef PMONITOR_INFO_2A PMONITOR_INFO_2;
  651. typedef LPMONITOR_INFO_2A LPMONITOR_INFO_2;
  652. #endif // UNICODE
  653.  
  654. typedef struct _DATATYPES_INFO_1A{
  655.     LPSTR     pName;
  656. } DATATYPES_INFO_1A, *PDATATYPES_INFO_1A, *LPDATATYPES_INFO_1A;
  657. typedef struct _DATATYPES_INFO_1W{
  658.     LPWSTR    pName;
  659. } DATATYPES_INFO_1W, *PDATATYPES_INFO_1W, *LPDATATYPES_INFO_1W;
  660. #ifdef UNICODE
  661. typedef DATATYPES_INFO_1W DATATYPES_INFO_1;
  662. typedef PDATATYPES_INFO_1W PDATATYPES_INFO_1;
  663. typedef LPDATATYPES_INFO_1W LPDATATYPES_INFO_1;
  664. #else
  665. typedef DATATYPES_INFO_1A DATATYPES_INFO_1;
  666. typedef PDATATYPES_INFO_1A PDATATYPES_INFO_1;
  667. typedef LPDATATYPES_INFO_1A LPDATATYPES_INFO_1;
  668. #endif // UNICODE
  669.  
  670. typedef struct _PRINTER_DEFAULTSA{
  671.     LPSTR         pDatatype;
  672.     LPDEVMODEA pDevMode;
  673.     ACCESS_MASK DesiredAccess;
  674. } PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
  675. typedef struct _PRINTER_DEFAULTSW{
  676.     LPWSTR        pDatatype;
  677.     LPDEVMODEW pDevMode;
  678.     ACCESS_MASK DesiredAccess;
  679. } PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
  680. #ifdef UNICODE
  681. typedef PRINTER_DEFAULTSW PRINTER_DEFAULTS;
  682. typedef PPRINTER_DEFAULTSW PPRINTER_DEFAULTS;
  683. typedef LPPRINTER_DEFAULTSW LPPRINTER_DEFAULTS;
  684. #else
  685. typedef PRINTER_DEFAULTSA PRINTER_DEFAULTS;
  686. typedef PPRINTER_DEFAULTSA PPRINTER_DEFAULTS;
  687. typedef LPPRINTER_DEFAULTSA LPPRINTER_DEFAULTS;
  688. #endif // UNICODE
  689.  
  690. BOOL
  691. WINAPI
  692. EnumPrintersA(
  693.     DWORD   Flags,
  694.     LPSTR   Name,
  695.     DWORD   Level,
  696.     LPBYTE  pPrinterEnum,
  697.     DWORD   cbBuf,
  698.     LPDWORD pcbNeeded,
  699.     LPDWORD pcReturned
  700. );
  701. BOOL
  702. WINAPI
  703. EnumPrintersW(
  704.     DWORD   Flags,
  705.     LPWSTR   Name,
  706.     DWORD   Level,
  707.     LPBYTE  pPrinterEnum,
  708.     DWORD   cbBuf,
  709.     LPDWORD pcbNeeded,
  710.     LPDWORD pcReturned
  711. );
  712. #ifdef UNICODE
  713. #define EnumPrinters  EnumPrintersW
  714. #else
  715. #define EnumPrinters  EnumPrintersA
  716. #endif // !UNICODE
  717.  
  718. #define PRINTER_ENUM_DEFAULT     0x00000001
  719. #define PRINTER_ENUM_LOCAL       0x00000002
  720. #define PRINTER_ENUM_CONNECTIONS 0x00000004
  721. #define PRINTER_ENUM_FAVORITE    0x00000004
  722. #define PRINTER_ENUM_NAME        0x00000008
  723. #define PRINTER_ENUM_REMOTE      0x00000010
  724. #define PRINTER_ENUM_SHARED      0x00000020
  725. #define PRINTER_ENUM_NETWORK     0x00000040
  726.  
  727. #define PRINTER_ENUM_EXPAND      0x00004000
  728. #define PRINTER_ENUM_CONTAINER   0x00008000
  729.  
  730. #define PRINTER_ENUM_ICONMASK    0x00ff0000
  731. #define PRINTER_ENUM_ICON1       0x00010000
  732. #define PRINTER_ENUM_ICON2       0x00020000
  733. #define PRINTER_ENUM_ICON3       0x00040000
  734. #define PRINTER_ENUM_ICON4       0x00080000
  735. #define PRINTER_ENUM_ICON5       0x00100000
  736. #define PRINTER_ENUM_ICON6       0x00200000
  737. #define PRINTER_ENUM_ICON7       0x00400000
  738. #define PRINTER_ENUM_ICON8       0x00800000
  739.  
  740. BOOL
  741. WINAPI
  742. OpenPrinterA(
  743.    LPSTR    pPrinterName,
  744.    LPHANDLE phPrinter,
  745.    LPPRINTER_DEFAULTSA pDefault
  746. );
  747. BOOL
  748. WINAPI
  749. OpenPrinterW(
  750.    LPWSTR    pPrinterName,
  751.    LPHANDLE phPrinter,
  752.    LPPRINTER_DEFAULTSW pDefault
  753. );
  754. #ifdef UNICODE
  755. #define OpenPrinter  OpenPrinterW
  756. #else
  757. #define OpenPrinter  OpenPrinterA
  758. #endif // !UNICODE
  759.  
  760. BOOL
  761. WINAPI
  762. ResetPrinterA(
  763.    HANDLE   hPrinter,
  764.    LPPRINTER_DEFAULTSA pDefault
  765. );
  766. BOOL
  767. WINAPI
  768. ResetPrinterW(
  769.    HANDLE   hPrinter,
  770.    LPPRINTER_DEFAULTSW pDefault
  771. );
  772. #ifdef UNICODE
  773. #define ResetPrinter  ResetPrinterW
  774. #else
  775. #define ResetPrinter  ResetPrinterA
  776. #endif // !UNICODE
  777.  
  778. BOOL
  779. WINAPI
  780. SetJobA(
  781.     HANDLE  hPrinter,
  782.     DWORD   JobId,
  783.     DWORD   Level,
  784.     LPBYTE  pJob,
  785.     DWORD   Command
  786. );
  787. BOOL
  788. WINAPI
  789. SetJobW(
  790.     HANDLE  hPrinter,
  791.     DWORD   JobId,
  792.     DWORD   Level,
  793.     LPBYTE  pJob,
  794.     DWORD   Command
  795. );
  796. #ifdef UNICODE
  797. #define SetJob  SetJobW
  798. #else
  799. #define SetJob  SetJobA
  800. #endif // !UNICODE
  801.  
  802. BOOL
  803. WINAPI
  804. GetJobA(
  805.    HANDLE   hPrinter,
  806.    DWORD    JobId,
  807.    DWORD    Level,
  808.    LPBYTE   pJob,
  809.    DWORD    cbBuf,
  810.    LPDWORD  pcbNeeded
  811. );
  812. BOOL
  813. WINAPI
  814. GetJobW(
  815.    HANDLE   hPrinter,
  816.    DWORD    JobId,
  817.    DWORD    Level,
  818.    LPBYTE   pJob,
  819.    DWORD    cbBuf,
  820.    LPDWORD  pcbNeeded
  821. );
  822. #ifdef UNICODE
  823. #define GetJob  GetJobW
  824. #else
  825. #define GetJob  GetJobA
  826. #endif // !UNICODE
  827.  
  828. BOOL
  829. WINAPI
  830. EnumJobsA(
  831.     HANDLE  hPrinter,
  832.     DWORD   FirstJob,
  833.     DWORD   NoJobs,
  834.     DWORD   Level,
  835.     LPBYTE  pJob,
  836.     DWORD   cbBuf,
  837.     LPDWORD pcbNeeded,
  838.     LPDWORD pcReturned
  839. );
  840. BOOL
  841. WINAPI
  842. EnumJobsW(
  843.     HANDLE  hPrinter,
  844.     DWORD   FirstJob,
  845.     DWORD   NoJobs,
  846.     DWORD   Level,
  847.     LPBYTE  pJob,
  848.     DWORD   cbBuf,
  849.     LPDWORD pcbNeeded,
  850.     LPDWORD pcReturned
  851. );
  852. #ifdef UNICODE
  853. #define EnumJobs  EnumJobsW
  854. #else
  855. #define EnumJobs  EnumJobsA
  856. #endif // !UNICODE
  857.  
  858. HANDLE
  859. WINAPI
  860. AddPrinterA(
  861.     LPSTR   pName,
  862.     DWORD   Level,
  863.     LPBYTE  pPrinter
  864. );
  865. HANDLE
  866. WINAPI
  867. AddPrinterW(
  868.     LPWSTR   pName,
  869.     DWORD   Level,
  870.     LPBYTE  pPrinter
  871. );
  872. #ifdef UNICODE
  873. #define AddPrinter  AddPrinterW
  874. #else
  875. #define AddPrinter  AddPrinterA
  876. #endif // !UNICODE
  877.  
  878. BOOL
  879. WINAPI
  880. DeletePrinter(
  881.    HANDLE   hPrinter
  882. );
  883.  
  884. BOOL
  885. WINAPI
  886. SetPrinterA(
  887.     HANDLE  hPrinter,
  888.     DWORD   Level,
  889.     LPBYTE  pPrinter,
  890.     DWORD   Command
  891. );
  892. BOOL
  893. WINAPI
  894. SetPrinterW(
  895.     HANDLE  hPrinter,
  896.     DWORD   Level,
  897.     LPBYTE  pPrinter,
  898.     DWORD   Command
  899. );
  900. #ifdef UNICODE
  901. #define SetPrinter  SetPrinterW
  902. #else
  903. #define SetPrinter  SetPrinterA
  904. #endif // !UNICODE
  905.  
  906. BOOL
  907. WINAPI
  908. GetPrinterA(
  909.     HANDLE  hPrinter,
  910.     DWORD   Level,
  911.     LPBYTE  pPrinter,
  912.     DWORD   cbBuf,
  913.     LPDWORD pcbNeeded
  914. );
  915. BOOL
  916. WINAPI
  917. GetPrinterW(
  918.     HANDLE  hPrinter,
  919.     DWORD   Level,
  920.     LPBYTE  pPrinter,
  921.     DWORD   cbBuf,
  922.     LPDWORD pcbNeeded
  923. );
  924. #ifdef UNICODE
  925. #define GetPrinter  GetPrinterW
  926. #else
  927. #define GetPrinter  GetPrinterA
  928. #endif // !UNICODE
  929.  
  930. BOOL
  931. WINAPI
  932. AddPrinterDriverA(
  933.     LPSTR   pName,
  934.     DWORD   Level,
  935.     LPBYTE  pDriverInfo
  936. );
  937. BOOL
  938. WINAPI
  939. AddPrinterDriverW(
  940.     LPWSTR   pName,
  941.     DWORD   Level,
  942.     LPBYTE  pDriverInfo
  943. );
  944. #ifdef UNICODE
  945. #define AddPrinterDriver  AddPrinterDriverW
  946. #else
  947. #define AddPrinterDriver  AddPrinterDriverA
  948. #endif // !UNICODE
  949.  
  950. BOOL
  951. WINAPI
  952. EnumPrinterDriversA(
  953.     LPSTR   pName,
  954.     LPSTR   pEnvironment,
  955.     DWORD   Level,
  956.     LPBYTE  pDriverInfo,
  957.     DWORD   cbBuf,
  958.     LPDWORD pcbNeeded,
  959.     LPDWORD pcReturned
  960. );
  961. BOOL
  962. WINAPI
  963. EnumPrinterDriversW(
  964.     LPWSTR   pName,
  965.     LPWSTR   pEnvironment,
  966.     DWORD   Level,
  967.     LPBYTE  pDriverInfo,
  968.     DWORD   cbBuf,
  969.     LPDWORD pcbNeeded,
  970.     LPDWORD pcReturned
  971. );
  972. #ifdef UNICODE
  973. #define EnumPrinterDrivers  EnumPrinterDriversW
  974. #else
  975. #define EnumPrinterDrivers  EnumPrinterDriversA
  976. #endif // !UNICODE
  977.  
  978. BOOL
  979. WINAPI
  980. GetPrinterDriverA(
  981.     HANDLE  hPrinter,
  982.     LPSTR   pEnvironment,
  983.     DWORD   Level,
  984.     LPBYTE  pDriverInfo,
  985.     DWORD   cbBuf,
  986.     LPDWORD pcbNeeded
  987. );
  988. BOOL
  989. WINAPI
  990. GetPrinterDriverW(
  991.     HANDLE  hPrinter,
  992.     LPWSTR   pEnvironment,
  993.     DWORD   Level,
  994.     LPBYTE  pDriverInfo,
  995.     DWORD   cbBuf,
  996.     LPDWORD pcbNeeded
  997. );
  998. #ifdef UNICODE
  999. #define GetPrinterDriver  GetPrinterDriverW
  1000. #else
  1001. #define GetPrinterDriver  GetPrinterDriverA
  1002. #endif // !UNICODE
  1003.  
  1004. BOOL
  1005. WINAPI
  1006. GetPrinterDriverDirectoryA(
  1007.     LPSTR   pName,
  1008.     LPSTR   pEnvironment,
  1009.     DWORD   Level,
  1010.     LPBYTE  pDriverDirectory,
  1011.     DWORD   cbBuf,
  1012.     LPDWORD pcbNeeded
  1013. );
  1014. BOOL
  1015. WINAPI
  1016. GetPrinterDriverDirectoryW(
  1017.     LPWSTR   pName,
  1018.     LPWSTR   pEnvironment,
  1019.     DWORD   Level,
  1020.     LPBYTE  pDriverDirectory,
  1021.     DWORD   cbBuf,
  1022.     LPDWORD pcbNeeded
  1023. );
  1024. #ifdef UNICODE
  1025. #define GetPrinterDriverDirectory  GetPrinterDriverDirectoryW
  1026. #else
  1027. #define GetPrinterDriverDirectory  GetPrinterDriverDirectoryA
  1028. #endif // !UNICODE
  1029.  
  1030. BOOL
  1031. WINAPI
  1032. DeletePrinterDriverA(
  1033.    LPSTR    pName,
  1034.    LPSTR    pEnvironment,
  1035.    LPSTR    pDriverName
  1036. );
  1037. BOOL
  1038. WINAPI
  1039. DeletePrinterDriverW(
  1040.    LPWSTR    pName,
  1041.    LPWSTR    pEnvironment,
  1042.    LPWSTR    pDriverName
  1043. );
  1044. #ifdef UNICODE
  1045. #define DeletePrinterDriver  DeletePrinterDriverW
  1046. #else
  1047. #define DeletePrinterDriver  DeletePrinterDriverA
  1048. #endif // !UNICODE
  1049.  
  1050. BOOL
  1051. WINAPI
  1052. AddPrintProcessorA(
  1053.     LPSTR   pName,
  1054.     LPSTR   pEnvironment,
  1055.     LPSTR   pPathName,
  1056.     LPSTR   pPrintProcessorName
  1057. );
  1058. BOOL
  1059. WINAPI
  1060. AddPrintProcessorW(
  1061.     LPWSTR   pName,
  1062.     LPWSTR   pEnvironment,
  1063.     LPWSTR   pPathName,
  1064.     LPWSTR   pPrintProcessorName
  1065. );
  1066. #ifdef UNICODE
  1067. #define AddPrintProcessor  AddPrintProcessorW
  1068. #else
  1069. #define AddPrintProcessor  AddPrintProcessorA
  1070. #endif // !UNICODE
  1071.  
  1072. BOOL
  1073. WINAPI
  1074. EnumPrintProcessorsA(
  1075.     LPSTR   pName,
  1076.     LPSTR   pEnvironment,
  1077.     DWORD   Level,
  1078.     LPBYTE  pPrintProcessorInfo,
  1079.     DWORD   cbBuf,
  1080.     LPDWORD pcbNeeded,
  1081.     LPDWORD pcReturned
  1082. );
  1083. BOOL
  1084. WINAPI
  1085. EnumPrintProcessorsW(
  1086.     LPWSTR   pName,
  1087.     LPWSTR   pEnvironment,
  1088.     DWORD   Level,
  1089.     LPBYTE  pPrintProcessorInfo,
  1090.     DWORD   cbBuf,
  1091.     LPDWORD pcbNeeded,
  1092.     LPDWORD pcReturned
  1093. );
  1094. #ifdef UNICODE
  1095. #define EnumPrintProcessors  EnumPrintProcessorsW
  1096. #else
  1097. #define EnumPrintProcessors  EnumPrintProcessorsA
  1098. #endif // !UNICODE
  1099.  
  1100.  
  1101.  
  1102. BOOL
  1103. WINAPI
  1104. GetPrintProcessorDirectoryA(
  1105.     LPSTR   pName,
  1106.     LPSTR   pEnvironment,
  1107.     DWORD   Level,
  1108.     LPBYTE  pPrintProcessorInfo,
  1109.     DWORD   cbBuf,
  1110.     LPDWORD pcbNeeded
  1111. );
  1112. BOOL
  1113. WINAPI
  1114. GetPrintProcessorDirectoryW(
  1115.     LPWSTR   pName,
  1116.     LPWSTR   pEnvironment,
  1117.     DWORD   Level,
  1118.     LPBYTE  pPrintProcessorInfo,
  1119.     DWORD   cbBuf,
  1120.     LPDWORD pcbNeeded
  1121. );
  1122. #ifdef UNICODE
  1123. #define GetPrintProcessorDirectory  GetPrintProcessorDirectoryW
  1124. #else
  1125. #define GetPrintProcessorDirectory  GetPrintProcessorDirectoryA
  1126. #endif // !UNICODE
  1127.  
  1128. BOOL
  1129. WINAPI
  1130. EnumPrintProcessorDatatypesA(
  1131.     LPSTR   pName,
  1132.     LPSTR   pPrintProcessorName,
  1133.     DWORD   Level,
  1134.     LPBYTE  pDatatypes,
  1135.     DWORD   cbBuf,
  1136.     LPDWORD pcbNeeded,
  1137.     LPDWORD pcReturned
  1138. );
  1139. BOOL
  1140. WINAPI
  1141. EnumPrintProcessorDatatypesW(
  1142.     LPWSTR   pName,
  1143.     LPWSTR   pPrintProcessorName,
  1144.     DWORD   Level,
  1145.     LPBYTE  pDatatypes,
  1146.     DWORD   cbBuf,
  1147.     LPDWORD pcbNeeded,
  1148.     LPDWORD pcReturned
  1149. );
  1150. #ifdef UNICODE
  1151. #define EnumPrintProcessorDatatypes  EnumPrintProcessorDatatypesW
  1152. #else
  1153. #define EnumPrintProcessorDatatypes  EnumPrintProcessorDatatypesA
  1154. #endif // !UNICODE
  1155.  
  1156. BOOL
  1157. WINAPI
  1158. DeletePrintProcessorA(
  1159.     LPSTR   pName,
  1160.     LPSTR   pEnvironment,
  1161.     LPSTR   pPrintProcessorName
  1162. );
  1163. BOOL
  1164. WINAPI
  1165. DeletePrintProcessorW(
  1166.     LPWSTR   pName,
  1167.     LPWSTR   pEnvironment,
  1168.     LPWSTR   pPrintProcessorName
  1169. );
  1170. #ifdef UNICODE
  1171. #define DeletePrintProcessor  DeletePrintProcessorW
  1172. #else
  1173. #define DeletePrintProcessor  DeletePrintProcessorA
  1174. #endif // !UNICODE
  1175.  
  1176. DWORD
  1177. WINAPI
  1178. StartDocPrinterA(
  1179.     HANDLE  hPrinter,
  1180.     DWORD   Level,
  1181.     LPBYTE  pDocInfo
  1182. );
  1183. DWORD
  1184. WINAPI
  1185. StartDocPrinterW(
  1186.     HANDLE  hPrinter,
  1187.     DWORD   Level,
  1188.     LPBYTE  pDocInfo
  1189. );
  1190. #ifdef UNICODE
  1191. #define StartDocPrinter  StartDocPrinterW
  1192. #else
  1193. #define StartDocPrinter  StartDocPrinterA
  1194. #endif // !UNICODE
  1195.  
  1196. BOOL
  1197. WINAPI
  1198. StartPagePrinter(
  1199.     HANDLE  hPrinter
  1200. );
  1201.  
  1202. BOOL
  1203. WINAPI
  1204. WritePrinter(
  1205.     HANDLE  hPrinter,
  1206.     LPVOID  pBuf,
  1207.     DWORD   cbBuf,
  1208.     LPDWORD pcWritten
  1209. );
  1210.  
  1211. BOOL
  1212. WINAPI
  1213. EndPagePrinter(
  1214.    HANDLE   hPrinter
  1215. );
  1216.  
  1217. BOOL
  1218. WINAPI
  1219. AbortPrinter(
  1220.    HANDLE   hPrinter
  1221. );
  1222.  
  1223. BOOL
  1224. WINAPI
  1225. ReadPrinter(
  1226.     HANDLE  hPrinter,
  1227.     LPVOID  pBuf,
  1228.     DWORD   cbBuf,
  1229.     LPDWORD pNoBytesRead
  1230. );
  1231.  
  1232. BOOL
  1233. WINAPI
  1234. EndDocPrinter(
  1235.    HANDLE   hPrinter
  1236. );
  1237.  
  1238. BOOL
  1239. WINAPI
  1240. AddJobA(
  1241.     HANDLE  hPrinter,
  1242.     DWORD   Level,
  1243.     LPBYTE  pData,
  1244.     DWORD   cbBuf,
  1245.     LPDWORD pcbNeeded
  1246. );
  1247. BOOL
  1248. WINAPI
  1249. AddJobW(
  1250.     HANDLE  hPrinter,
  1251.     DWORD   Level,
  1252.     LPBYTE  pData,
  1253.     DWORD   cbBuf,
  1254.     LPDWORD pcbNeeded
  1255. );
  1256. #ifdef UNICODE
  1257. #define AddJob  AddJobW
  1258. #else
  1259. #define AddJob  AddJobA
  1260. #endif // !UNICODE
  1261.  
  1262. BOOL
  1263. WINAPI
  1264. ScheduleJob(
  1265.     HANDLE  hPrinter,
  1266.     DWORD   JobId
  1267. );
  1268.  
  1269. BOOL
  1270. WINAPI
  1271. PrinterProperties(
  1272.     HWND    hWnd,
  1273.     HANDLE  hPrinter
  1274. );
  1275.  
  1276. LONG
  1277. WINAPI
  1278. DocumentPropertiesA(
  1279.     HWND      hWnd,
  1280.     HANDLE    hPrinter,
  1281.     LPSTR   pDeviceName,
  1282.     PDEVMODEA pDevModeOutput,
  1283.     PDEVMODEA pDevModeInput,
  1284.     DWORD     fMode
  1285. );
  1286. LONG
  1287. WINAPI
  1288. DocumentPropertiesW(
  1289.     HWND      hWnd,
  1290.     HANDLE    hPrinter,
  1291.     LPWSTR   pDeviceName,
  1292.     PDEVMODEW pDevModeOutput,
  1293.     PDEVMODEW pDevModeInput,
  1294.     DWORD     fMode
  1295. );
  1296. #ifdef UNICODE
  1297. #define DocumentProperties  DocumentPropertiesW
  1298. #else
  1299. #define DocumentProperties  DocumentPropertiesA
  1300. #endif // !UNICODE
  1301.  
  1302. LONG
  1303. WINAPI
  1304. AdvancedDocumentPropertiesA(
  1305.     HWND    hWnd,
  1306.     HANDLE  hPrinter,
  1307.     LPSTR   pDeviceName,
  1308.     PDEVMODEA pDevModeOutput,
  1309.     PDEVMODEA pDevModeInput
  1310. );
  1311. LONG
  1312. WINAPI
  1313. AdvancedDocumentPropertiesW(
  1314.     HWND    hWnd,
  1315.     HANDLE  hPrinter,
  1316.     LPWSTR   pDeviceName,
  1317.     PDEVMODEW pDevModeOutput,
  1318.     PDEVMODEW pDevModeInput
  1319. );
  1320. #ifdef UNICODE
  1321. #define AdvancedDocumentProperties  AdvancedDocumentPropertiesW
  1322. #else
  1323. #define AdvancedDocumentProperties  AdvancedDocumentPropertiesA
  1324. #endif // !UNICODE
  1325.  
  1326.  
  1327.  
  1328. DWORD
  1329. WINAPI
  1330. GetPrinterDataA(
  1331.     HANDLE   hPrinter,
  1332.     LPSTR  pValueName,
  1333.     LPDWORD  pType,
  1334.     LPBYTE   pData,
  1335.     DWORD    nSize,
  1336.     LPDWORD  pcbNeeded
  1337. );
  1338. DWORD
  1339. WINAPI
  1340. GetPrinterDataW(
  1341.     HANDLE   hPrinter,
  1342.     LPWSTR  pValueName,
  1343.     LPDWORD  pType,
  1344.     LPBYTE   pData,
  1345.     DWORD    nSize,
  1346.     LPDWORD  pcbNeeded
  1347. );
  1348. #ifdef UNICODE
  1349. #define GetPrinterData  GetPrinterDataW
  1350. #else
  1351. #define GetPrinterData  GetPrinterDataA
  1352. #endif // !UNICODE
  1353.  
  1354. DWORD
  1355. WINAPI
  1356. EnumPrinterDataA(
  1357.     HANDLE   hPrinter,
  1358.     DWORD    dwIndex,
  1359.     LPSTR  pValueName,
  1360.     DWORD    cbValueName,
  1361.     LPDWORD  pcbValueName,
  1362.     LPDWORD  pType,
  1363.     LPBYTE   pData,
  1364.     DWORD    cbData,
  1365.     LPDWORD  pcbData
  1366. );
  1367. DWORD
  1368. WINAPI
  1369. EnumPrinterDataW(
  1370.     HANDLE   hPrinter,
  1371.     DWORD    dwIndex,
  1372.     LPWSTR  pValueName,
  1373.     DWORD    cbValueName,
  1374.     LPDWORD  pcbValueName,
  1375.     LPDWORD  pType,
  1376.     LPBYTE   pData,
  1377.     DWORD    cbData,
  1378.     LPDWORD  pcbData
  1379. );
  1380. #ifdef UNICODE
  1381. #define EnumPrinterData  EnumPrinterDataW
  1382. #else
  1383. #define EnumPrinterData  EnumPrinterDataA
  1384. #endif // !UNICODE
  1385.  
  1386.  
  1387. DWORD
  1388. WINAPI
  1389. SetPrinterDataA(
  1390.     HANDLE  hPrinter,
  1391.     LPSTR   pValueName,
  1392.     DWORD   Type,
  1393.     LPBYTE  pData,
  1394.     DWORD   cbData
  1395. );
  1396. DWORD
  1397. WINAPI
  1398. SetPrinterDataW(
  1399.     HANDLE  hPrinter,
  1400.     LPWSTR   pValueName,
  1401.     DWORD   Type,
  1402.     LPBYTE  pData,
  1403.     DWORD   cbData
  1404. );
  1405. #ifdef UNICODE
  1406. #define SetPrinterData  SetPrinterDataW
  1407. #else
  1408. #define SetPrinterData  SetPrinterDataA
  1409. #endif // !UNICODE
  1410.  
  1411.  
  1412. DWORD
  1413. WINAPI
  1414. DeletePrinterDataA(
  1415.     HANDLE  hPrinter,
  1416.     LPSTR pValueName
  1417. );
  1418. DWORD
  1419. WINAPI
  1420. DeletePrinterDataW(
  1421.     HANDLE  hPrinter,
  1422.     LPWSTR pValueName
  1423. );
  1424. #ifdef UNICODE
  1425. #define DeletePrinterData  DeletePrinterDataW
  1426. #else
  1427. #define DeletePrinterData  DeletePrinterDataA
  1428. #endif // !UNICODE
  1429.  
  1430. #define PRINTER_NOTIFY_TYPE 0x00
  1431. #define JOB_NOTIFY_TYPE     0x01
  1432.  
  1433. #define PRINTER_NOTIFY_FIELD_SERVER_NAME             0x00
  1434. #define PRINTER_NOTIFY_FIELD_PRINTER_NAME            0x01
  1435. #define PRINTER_NOTIFY_FIELD_SHARE_NAME              0x02
  1436. #define PRINTER_NOTIFY_FIELD_PORT_NAME               0x03
  1437. #define PRINTER_NOTIFY_FIELD_DRIVER_NAME             0x04
  1438. #define PRINTER_NOTIFY_FIELD_COMMENT                 0x05
  1439. #define PRINTER_NOTIFY_FIELD_LOCATION                0x06
  1440. #define PRINTER_NOTIFY_FIELD_DEVMODE                 0x07
  1441. #define PRINTER_NOTIFY_FIELD_SEPFILE                 0x08
  1442. #define PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR         0x09
  1443. #define PRINTER_NOTIFY_FIELD_PARAMETERS              0x0A
  1444. #define PRINTER_NOTIFY_FIELD_DATATYPE                0x0B
  1445. #define PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR     0x0C
  1446. #define PRINTER_NOTIFY_FIELD_ATTRIBUTES              0x0D
  1447. #define PRINTER_NOTIFY_FIELD_PRIORITY                0x0E
  1448. #define PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY        0x0F
  1449. #define PRINTER_NOTIFY_FIELD_START_TIME              0x10
  1450. #define PRINTER_NOTIFY_FIELD_UNTIL_TIME              0x11
  1451. #define PRINTER_NOTIFY_FIELD_STATUS                  0x12
  1452. #define PRINTER_NOTIFY_FIELD_STATUS_STRING           0x13
  1453. #define PRINTER_NOTIFY_FIELD_CJOBS                   0x14
  1454. #define PRINTER_NOTIFY_FIELD_AVERAGE_PPM             0x15
  1455. #define PRINTER_NOTIFY_FIELD_TOTAL_PAGES             0x16
  1456. #define PRINTER_NOTIFY_FIELD_PAGES_PRINTED           0x17
  1457. #define PRINTER_NOTIFY_FIELD_TOTAL_BYTES             0x18
  1458. #define PRINTER_NOTIFY_FIELD_BYTES_PRINTED           0x19
  1459.  
  1460. #define JOB_NOTIFY_FIELD_PRINTER_NAME                0x00
  1461. #define JOB_NOTIFY_FIELD_MACHINE_NAME                0x01
  1462. #define JOB_NOTIFY_FIELD_PORT_NAME                   0x02
  1463. #define JOB_NOTIFY_FIELD_USER_NAME                   0x03
  1464. #define JOB_NOTIFY_FIELD_NOTIFY_NAME                 0x04
  1465. #define JOB_NOTIFY_FIELD_DATATYPE                    0x05
  1466. #define JOB_NOTIFY_FIELD_PRINT_PROCESSOR             0x06
  1467. #define JOB_NOTIFY_FIELD_PARAMETERS                  0x07
  1468. #define JOB_NOTIFY_FIELD_DRIVER_NAME                 0x08
  1469. #define JOB_NOTIFY_FIELD_DEVMODE                     0x09
  1470. #define JOB_NOTIFY_FIELD_STATUS                      0x0A
  1471. #define JOB_NOTIFY_FIELD_STATUS_STRING               0x0B
  1472. #define JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR         0x0C
  1473. #define JOB_NOTIFY_FIELD_DOCUMENT                    0x0D
  1474. #define JOB_NOTIFY_FIELD_PRIORITY                    0x0E
  1475. #define JOB_NOTIFY_FIELD_POSITION                    0x0F
  1476. #define JOB_NOTIFY_FIELD_SUBMITTED                   0x10
  1477. #define JOB_NOTIFY_FIELD_START_TIME                  0x11
  1478. #define JOB_NOTIFY_FIELD_UNTIL_TIME                  0x12
  1479. #define JOB_NOTIFY_FIELD_TIME                        0x13
  1480. #define JOB_NOTIFY_FIELD_TOTAL_PAGES                 0x14
  1481. #define JOB_NOTIFY_FIELD_PAGES_PRINTED               0x15
  1482. #define JOB_NOTIFY_FIELD_TOTAL_BYTES                 0x16
  1483. #define JOB_NOTIFY_FIELD_BYTES_PRINTED               0x17
  1484.  
  1485.  
  1486. typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
  1487.     WORD Type;
  1488.     WORD Reserved0;
  1489.     DWORD Reserved1;
  1490.     DWORD Reserved2;
  1491.     DWORD Count;
  1492.     PWORD pFields;
  1493. } PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE, *LPPRINTER_NOTIFY_OPTIONS_TYPE;
  1494.  
  1495.  
  1496. #define PRINTER_NOTIFY_OPTIONS_REFRESH  0x01
  1497.  
  1498. typedef struct _PRINTER_NOTIFY_OPTIONS {
  1499.     DWORD Version;
  1500.     DWORD Flags;
  1501.     DWORD Count;
  1502.     PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
  1503. } PRINTER_NOTIFY_OPTIONS, *PPRINTER_NOTIFY_OPTIONS, *LPPRINTER_NOTIFY_OPTIONS;
  1504.  
  1505.  
  1506.  
  1507. #define PRINTER_NOTIFY_INFO_DISCARDED       0x01
  1508.  
  1509. typedef struct _PRINTER_NOTIFY_INFO_DATA {
  1510.     WORD Type;
  1511.     WORD Field;
  1512.     DWORD Reserved;
  1513.     DWORD Id;
  1514.     union {
  1515.         DWORD adwData[2];
  1516.         struct {
  1517.             DWORD  cbBuf;
  1518.             LPVOID pBuf;
  1519.         } Data;
  1520.     } NotifyData;
  1521. } PRINTER_NOTIFY_INFO_DATA, *PPRINTER_NOTIFY_INFO_DATA, *LPPRINTER_NOTIFY_INFO_DATA;
  1522.  
  1523. typedef struct _PRINTER_NOTIFY_INFO {
  1524.     DWORD Version;
  1525.     DWORD Flags;
  1526.     DWORD Count;
  1527.     PRINTER_NOTIFY_INFO_DATA aData[1];
  1528. } PRINTER_NOTIFY_INFO, *PPRINTER_NOTIFY_INFO, *LPPRINTER_NOTIFY_INFO;
  1529.  
  1530. DWORD
  1531. WINAPI
  1532. WaitForPrinterChange(
  1533.     HANDLE  hPrinter,
  1534.     DWORD   Flags
  1535. );
  1536.  
  1537. HANDLE
  1538. WINAPI
  1539. FindFirstPrinterChangeNotification(
  1540.     HANDLE  hPrinter,
  1541.     DWORD   fdwFlags,
  1542.     DWORD   fdwOptions,
  1543.     LPVOID  pPrinterNotifyOptions
  1544. );
  1545.  
  1546.  
  1547. BOOL
  1548. WINAPI
  1549. FindNextPrinterChangeNotification(
  1550.     HANDLE hChange,
  1551.     PDWORD pdwChange,
  1552.     LPVOID pvReserved,
  1553.     LPVOID *ppPrinterNotifyInfo
  1554. );
  1555.  
  1556. BOOL
  1557. WINAPI
  1558. FreePrinterNotifyInfo(
  1559.     PPRINTER_NOTIFY_INFO pPrinterNotifyInfo
  1560. );
  1561.  
  1562. BOOL
  1563. WINAPI
  1564. FindClosePrinterChangeNotification(
  1565.     HANDLE hChange
  1566. );
  1567.  
  1568. #define PRINTER_CHANGE_ADD_PRINTER              0x00000001
  1569. #define PRINTER_CHANGE_SET_PRINTER              0x00000002
  1570. #define PRINTER_CHANGE_DELETE_PRINTER           0x00000004
  1571. #define PRINTER_CHANGE_FAILED_CONNECTION_PRINTER    0x00000008
  1572. #define PRINTER_CHANGE_PRINTER                  0x000000FF
  1573. #define PRINTER_CHANGE_ADD_JOB                  0x00000100
  1574. #define PRINTER_CHANGE_SET_JOB                  0x00000200
  1575. #define PRINTER_CHANGE_DELETE_JOB               0x00000400
  1576. #define PRINTER_CHANGE_WRITE_JOB                0x00000800
  1577. #define PRINTER_CHANGE_JOB                      0x0000FF00
  1578. #define PRINTER_CHANGE_ADD_FORM                 0x00010000
  1579. #define PRINTER_CHANGE_SET_FORM                 0x00020000
  1580. #define PRINTER_CHANGE_DELETE_FORM              0x00040000
  1581. #define PRINTER_CHANGE_FORM                     0x00070000
  1582. #define PRINTER_CHANGE_ADD_PORT                 0x00100000
  1583. #define PRINTER_CHANGE_CONFIGURE_PORT           0x00200000
  1584. #define PRINTER_CHANGE_DELETE_PORT              0x00400000
  1585. #define PRINTER_CHANGE_PORT                     0x00700000
  1586. #define PRINTER_CHANGE_ADD_PRINT_PROCESSOR      0x01000000
  1587. #define PRINTER_CHANGE_DELETE_PRINT_PROCESSOR   0x04000000
  1588. #define PRINTER_CHANGE_PRINT_PROCESSOR          0x07000000
  1589. #define PRINTER_CHANGE_ADD_PRINTER_DRIVER       0x10000000
  1590. #define PRINTER_CHANGE_SET_PRINTER_DRIVER       0x20000000
  1591. #define PRINTER_CHANGE_DELETE_PRINTER_DRIVER    0x40000000
  1592. #define PRINTER_CHANGE_PRINTER_DRIVER           0x70000000
  1593. #define PRINTER_CHANGE_TIMEOUT                  0x80000000
  1594. #define PRINTER_CHANGE_ALL                      0x7777FFFF
  1595.  
  1596. DWORD
  1597. WINAPI
  1598. PrinterMessageBoxA(
  1599.     HANDLE  hPrinter,
  1600.     DWORD   Error,
  1601.     HWND    hWnd,
  1602.     LPSTR   pText,
  1603.     LPSTR   pCaption,
  1604.     DWORD   dwType
  1605. );
  1606. DWORD
  1607. WINAPI
  1608. PrinterMessageBoxW(
  1609.     HANDLE  hPrinter,
  1610.     DWORD   Error,
  1611.     HWND    hWnd,
  1612.     LPWSTR   pText,
  1613.     LPWSTR   pCaption,
  1614.     DWORD   dwType
  1615. );
  1616. #ifdef UNICODE
  1617. #define PrinterMessageBox  PrinterMessageBoxW
  1618. #else
  1619. #define PrinterMessageBox  PrinterMessageBoxA
  1620. #endif // !UNICODE
  1621.  
  1622.  
  1623.  
  1624. #define PRINTER_ERROR_INFORMATION   0x80000000
  1625. #define PRINTER_ERROR_WARNING       0x40000000
  1626. #define PRINTER_ERROR_SEVERE        0x20000000
  1627.  
  1628. #define PRINTER_ERROR_OUTOFPAPER    0x00000001
  1629. #define PRINTER_ERROR_JAM           0x00000002
  1630. #define PRINTER_ERROR_OUTOFTONER    0x00000004
  1631.  
  1632. BOOL
  1633. WINAPI
  1634. ClosePrinter(
  1635.     HANDLE hPrinter
  1636. );
  1637.  
  1638. BOOL
  1639. WINAPI
  1640. AddFormA(
  1641.     HANDLE  hPrinter,
  1642.     DWORD   Level,
  1643.     LPBYTE  pForm
  1644. );
  1645. BOOL
  1646. WINAPI
  1647. AddFormW(
  1648.     HANDLE  hPrinter,
  1649.     DWORD   Level,
  1650.     LPBYTE  pForm
  1651. );
  1652. #ifdef UNICODE
  1653. #define AddForm  AddFormW
  1654. #else
  1655. #define AddForm  AddFormA
  1656. #endif // !UNICODE
  1657.  
  1658.  
  1659.  
  1660. BOOL
  1661. WINAPI
  1662. DeleteFormA(
  1663.     HANDLE  hPrinter,
  1664.     LPSTR   pFormName
  1665. );
  1666. BOOL
  1667. WINAPI
  1668. DeleteFormW(
  1669.     HANDLE  hPrinter,
  1670.     LPWSTR   pFormName
  1671. );
  1672. #ifdef UNICODE
  1673. #define DeleteForm  DeleteFormW
  1674. #else
  1675. #define DeleteForm  DeleteFormA
  1676. #endif // !UNICODE
  1677.  
  1678.  
  1679.  
  1680. BOOL
  1681. WINAPI
  1682. GetFormA(
  1683.     HANDLE  hPrinter,
  1684.     LPSTR   pFormName,
  1685.     DWORD   Level,
  1686.     LPBYTE  pForm,
  1687.     DWORD   cbBuf,
  1688.     LPDWORD pcbNeeded
  1689. );
  1690. BOOL
  1691. WINAPI
  1692. GetFormW(
  1693.     HANDLE  hPrinter,
  1694.     LPWSTR   pFormName,
  1695.     DWORD   Level,
  1696.     LPBYTE  pForm,
  1697.     DWORD   cbBuf,
  1698.     LPDWORD pcbNeeded
  1699. );
  1700. #ifdef UNICODE
  1701. #define GetForm  GetFormW
  1702. #else
  1703. #define GetForm  GetFormA
  1704. #endif // !UNICODE
  1705.  
  1706.  
  1707.  
  1708. BOOL
  1709. WINAPI
  1710. SetFormA(
  1711.     HANDLE  hPrinter,
  1712.     LPSTR   pFormName,
  1713.     DWORD   Level,
  1714.     LPBYTE  pForm
  1715. );
  1716. BOOL
  1717. WINAPI
  1718. SetFormW(
  1719.     HANDLE  hPrinter,
  1720.     LPWSTR   pFormName,
  1721.     DWORD   Level,
  1722.     LPBYTE  pForm
  1723. );
  1724. #ifdef UNICODE
  1725. #define SetForm  SetFormW
  1726. #else
  1727. #define SetForm  SetFormA
  1728. #endif // !UNICODE
  1729.  
  1730.  
  1731.  
  1732. BOOL
  1733. WINAPI
  1734. EnumFormsA(
  1735.     HANDLE  hPrinter,
  1736.     DWORD   Level,
  1737.     LPBYTE  pForm,
  1738.     DWORD   cbBuf,
  1739.     LPDWORD pcbNeeded,
  1740.     LPDWORD pcReturned
  1741. );
  1742. BOOL
  1743. WINAPI
  1744. EnumFormsW(
  1745.     HANDLE  hPrinter,
  1746.     DWORD   Level,
  1747.     LPBYTE  pForm,
  1748.     DWORD   cbBuf,
  1749.     LPDWORD pcbNeeded,
  1750.     LPDWORD pcReturned
  1751. );
  1752. #ifdef UNICODE
  1753. #define EnumForms  EnumFormsW
  1754. #else
  1755. #define EnumForms  EnumFormsA
  1756. #endif // !UNICODE
  1757.  
  1758.  
  1759.  
  1760. BOOL
  1761. WINAPI
  1762. EnumMonitorsA(
  1763.     LPSTR   pName,
  1764.     DWORD   Level,
  1765.     LPBYTE  pMonitors,
  1766.     DWORD   cbBuf,
  1767.     LPDWORD pcbNeeded,
  1768.     LPDWORD pcReturned
  1769. );
  1770. BOOL
  1771. WINAPI
  1772. EnumMonitorsW(
  1773.     LPWSTR   pName,
  1774.     DWORD   Level,
  1775.     LPBYTE  pMonitors,
  1776.     DWORD   cbBuf,
  1777.     LPDWORD pcbNeeded,
  1778.     LPDWORD pcReturned
  1779. );
  1780. #ifdef UNICODE
  1781. #define EnumMonitors  EnumMonitorsW
  1782. #else
  1783. #define EnumMonitors  EnumMonitorsA
  1784. #endif // !UNICODE
  1785.  
  1786.  
  1787.  
  1788. BOOL
  1789. WINAPI
  1790. AddMonitorA(
  1791.     LPSTR   pName,
  1792.     DWORD   Level,
  1793.     LPBYTE  pMonitors
  1794. );
  1795. BOOL
  1796. WINAPI
  1797. AddMonitorW(
  1798.     LPWSTR   pName,
  1799.     DWORD   Level,
  1800.     LPBYTE  pMonitors
  1801. );
  1802. #ifdef UNICODE
  1803. #define AddMonitor  AddMonitorW
  1804. #else
  1805. #define AddMonitor  AddMonitorA
  1806. #endif // !UNICODE
  1807.  
  1808.  
  1809.  
  1810. BOOL
  1811. WINAPI
  1812. DeleteMonitorA(
  1813.     LPSTR   pName,
  1814.     LPSTR   pEnvironment,
  1815.     LPSTR   pMonitorName
  1816. );
  1817. BOOL
  1818. WINAPI
  1819. DeleteMonitorW(
  1820.     LPWSTR   pName,
  1821.     LPWSTR   pEnvironment,
  1822.     LPWSTR   pMonitorName
  1823. );
  1824. #ifdef UNICODE
  1825. #define DeleteMonitor  DeleteMonitorW
  1826. #else
  1827. #define DeleteMonitor  DeleteMonitorA
  1828. #endif // !UNICODE
  1829.  
  1830.  
  1831.  
  1832. BOOL
  1833. WINAPI
  1834. EnumPortsA(
  1835.     LPSTR   pName,
  1836.     DWORD   Level,
  1837.     LPBYTE  pPorts,
  1838.     DWORD   cbBuf,
  1839.     LPDWORD pcbNeeded,
  1840.     LPDWORD pcReturned
  1841. );
  1842. BOOL
  1843. WINAPI
  1844. EnumPortsW(
  1845.     LPWSTR   pName,
  1846.     DWORD   Level,
  1847.     LPBYTE  pPorts,
  1848.     DWORD   cbBuf,
  1849.     LPDWORD pcbNeeded,
  1850.     LPDWORD pcReturned
  1851. );
  1852. #ifdef UNICODE
  1853. #define EnumPorts  EnumPortsW
  1854. #else
  1855. #define EnumPorts  EnumPortsA
  1856. #endif // !UNICODE
  1857.  
  1858.  
  1859.  
  1860. BOOL
  1861. WINAPI
  1862. AddPortA(
  1863.     LPSTR   pName,
  1864.     HWND    hWnd,
  1865.     LPSTR   pMonitorName
  1866. );
  1867. BOOL
  1868. WINAPI
  1869. AddPortW(
  1870.     LPWSTR   pName,
  1871.     HWND    hWnd,
  1872.     LPWSTR   pMonitorName
  1873. );
  1874. #ifdef UNICODE
  1875. #define AddPort  AddPortW
  1876. #else
  1877. #define AddPort  AddPortA
  1878. #endif // !UNICODE
  1879.  
  1880.  
  1881.  
  1882. BOOL
  1883. WINAPI
  1884. ConfigurePortA(
  1885.     LPSTR   pName,
  1886.     HWND    hWnd,
  1887.     LPSTR   pPortName
  1888. );
  1889. BOOL
  1890. WINAPI
  1891. ConfigurePortW(
  1892.     LPWSTR   pName,
  1893.     HWND    hWnd,
  1894.     LPWSTR   pPortName
  1895. );
  1896. #ifdef UNICODE
  1897. #define ConfigurePort  ConfigurePortW
  1898. #else
  1899. #define ConfigurePort  ConfigurePortA
  1900. #endif // !UNICODE
  1901.  
  1902.  
  1903.  
  1904. BOOL
  1905. WINAPI
  1906. DeletePortA(
  1907.     LPSTR   pName,
  1908.     HWND    hWnd,
  1909.     LPSTR   pPortName
  1910. );
  1911. BOOL
  1912. WINAPI
  1913. DeletePortW(
  1914.     LPWSTR   pName,
  1915.     HWND    hWnd,
  1916.     LPWSTR   pPortName
  1917. );
  1918. #ifdef UNICODE
  1919. #define DeletePort  DeletePortW
  1920. #else
  1921. #define DeletePort  DeletePortA
  1922. #endif // !UNICODE
  1923.  
  1924.  
  1925.  
  1926. BOOL
  1927. WINAPI
  1928. SetPortA(
  1929.     LPSTR     pName,
  1930.     LPSTR     pPortName,
  1931.     DWORD       dwLevel,
  1932.     LPBYTE      pPortInfo
  1933. );
  1934. BOOL
  1935. WINAPI
  1936. SetPortW(
  1937.     LPWSTR     pName,
  1938.     LPWSTR     pPortName,
  1939.     DWORD       dwLevel,
  1940.     LPBYTE      pPortInfo
  1941. );
  1942. #ifdef UNICODE
  1943. #define SetPort  SetPortW
  1944. #else
  1945. #define SetPort  SetPortA
  1946. #endif // !UNICODE
  1947.  
  1948.  
  1949.  
  1950. BOOL
  1951. WINAPI
  1952. AddPrinterConnectionA(
  1953.     LPSTR   pName
  1954. );
  1955. BOOL
  1956. WINAPI
  1957. AddPrinterConnectionW(
  1958.     LPWSTR   pName
  1959. );
  1960. #ifdef UNICODE
  1961. #define AddPrinterConnection  AddPrinterConnectionW
  1962. #else
  1963. #define AddPrinterConnection  AddPrinterConnectionA
  1964. #endif // !UNICODE
  1965.  
  1966.  
  1967.  
  1968. BOOL
  1969. WINAPI
  1970. DeletePrinterConnectionA(
  1971.     LPSTR   pName
  1972. );
  1973. BOOL
  1974. WINAPI
  1975. DeletePrinterConnectionW(
  1976.     LPWSTR   pName
  1977. );
  1978. #ifdef UNICODE
  1979. #define DeletePrinterConnection  DeletePrinterConnectionW
  1980. #else
  1981. #define DeletePrinterConnection  DeletePrinterConnectionA
  1982. #endif // !UNICODE
  1983.  
  1984.  
  1985.  
  1986. HANDLE
  1987. WINAPI
  1988. ConnectToPrinterDlg(
  1989.     HWND    hwnd,
  1990.     DWORD   Flags
  1991. );
  1992.  
  1993. typedef struct _PROVIDOR_INFO_1A{
  1994.     LPSTR     pName;
  1995.     LPSTR     pEnvironment;
  1996.     LPSTR     pDLLName;
  1997. } PROVIDOR_INFO_1A, *PPROVIDOR_INFO_1A, *LPPROVIDOR_INFO_1A;
  1998. typedef struct _PROVIDOR_INFO_1W{
  1999.     LPWSTR    pName;
  2000.     LPWSTR    pEnvironment;
  2001.     LPWSTR    pDLLName;
  2002. } PROVIDOR_INFO_1W, *PPROVIDOR_INFO_1W, *LPPROVIDOR_INFO_1W;
  2003. #ifdef UNICODE
  2004. typedef PROVIDOR_INFO_1W PROVIDOR_INFO_1;
  2005. typedef PPROVIDOR_INFO_1W PPROVIDOR_INFO_1;
  2006. typedef LPPROVIDOR_INFO_1W LPPROVIDOR_INFO_1;
  2007. #else
  2008. typedef PROVIDOR_INFO_1A PROVIDOR_INFO_1;
  2009. typedef PPROVIDOR_INFO_1A PPROVIDOR_INFO_1;
  2010. typedef LPPROVIDOR_INFO_1A LPPROVIDOR_INFO_1;
  2011. #endif // UNICODE
  2012.  
  2013.  
  2014.  
  2015. BOOL
  2016. WINAPI
  2017. AddPrintProvidorA(
  2018.     LPSTR  pName,
  2019.     DWORD    level,
  2020.     LPBYTE   pProvidorInfo
  2021. );
  2022. BOOL
  2023. WINAPI
  2024. AddPrintProvidorW(
  2025.     LPWSTR  pName,
  2026.     DWORD    level,
  2027.     LPBYTE   pProvidorInfo
  2028. );
  2029. #ifdef UNICODE
  2030. #define AddPrintProvidor  AddPrintProvidorW
  2031. #else
  2032. #define AddPrintProvidor  AddPrintProvidorA
  2033. #endif // !UNICODE
  2034.  
  2035. BOOL
  2036. WINAPI
  2037. DeletePrintProvidorA(
  2038.     LPSTR   pName,
  2039.     LPSTR   pEnvironment,
  2040.     LPSTR   pPrintProvidorName
  2041. );
  2042. BOOL
  2043. WINAPI
  2044. DeletePrintProvidorW(
  2045.     LPWSTR   pName,
  2046.     LPWSTR   pEnvironment,
  2047.     LPWSTR   pPrintProvidorName
  2048. );
  2049. #ifdef UNICODE
  2050. #define DeletePrintProvidor  DeletePrintProvidorW
  2051. #else
  2052. #define DeletePrintProvidor  DeletePrintProvidorA
  2053. #endif // !UNICODE
  2054.  
  2055.  
  2056.  
  2057. /*
  2058.  * SetPrinterData and GetPrinterData Server Handle Key values
  2059.  */
  2060.  
  2061. #define    SPLREG_DEFAULT_SPOOL_DIRECTORY             TEXT("DefaultSpoolDirectory")
  2062. #define    SPLREG_PORT_THREAD_PRIORITY_DEFAULT        TEXT("PortThreadPriorityDefault")
  2063. #define    SPLREG_PORT_THREAD_PRIORITY                TEXT("PortThreadPriority")
  2064. #define    SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT   TEXT("SchedulerThreadPriorityDefault")
  2065. #define    SPLREG_SCHEDULER_THREAD_PRIORITY           TEXT("SchedulerThreadPriority")
  2066. #define    SPLREG_BEEP_ENABLED                        TEXT("BeepEnabled")
  2067. #define    SPLREG_NET_POPUP                           TEXT("NetPopup")
  2068. #define    SPLREG_EVENT_LOG                           TEXT("EventLog")
  2069. #define    SPLREG_MAJOR_VERSION                       TEXT("MajorVersion")
  2070. #define    SPLREG_MINOR_VERSION                       TEXT("MinorVersion")
  2071. #define    SPLREG_ARCHITECTURE                        TEXT("Architecture")
  2072.  
  2073.  
  2074. #define SERVER_ACCESS_ADMINISTER    0x00000001
  2075. #define SERVER_ACCESS_ENUMERATE     0x00000002
  2076.  
  2077. #define PRINTER_ACCESS_ADMINISTER   0x00000004
  2078. #define PRINTER_ACCESS_USE          0x00000008
  2079.  
  2080. #define JOB_ACCESS_ADMINISTER       0x00000010
  2081.  
  2082.  
  2083. /*
  2084.  * Access rights for print servers
  2085.  */
  2086.  
  2087. #define SERVER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED      |\
  2088.                               SERVER_ACCESS_ADMINISTER      |\
  2089.                               SERVER_ACCESS_ENUMERATE)
  2090.  
  2091. #define SERVER_READ          (STANDARD_RIGHTS_READ          |\
  2092.                               SERVER_ACCESS_ENUMERATE)
  2093.  
  2094. #define SERVER_WRITE         (STANDARD_RIGHTS_WRITE         |\
  2095.                               SERVER_ACCESS_ADMINISTER      |\
  2096.                               SERVER_ACCESS_ENUMERATE)
  2097.  
  2098. #define SERVER_EXECUTE       (STANDARD_RIGHTS_EXECUTE       |\
  2099.                               SERVER_ACCESS_ENUMERATE)
  2100.  
  2101. /*
  2102.  * Access rights for printers
  2103.  */
  2104.  
  2105. #define PRINTER_ALL_ACCESS    (STANDARD_RIGHTS_REQUIRED     |\
  2106.                                PRINTER_ACCESS_ADMINISTER    |\
  2107.                                PRINTER_ACCESS_USE)
  2108.  
  2109. #define PRINTER_READ          (STANDARD_RIGHTS_READ         |\
  2110.                                PRINTER_ACCESS_USE)
  2111.  
  2112. #define PRINTER_WRITE         (STANDARD_RIGHTS_WRITE        |\
  2113.                                PRINTER_ACCESS_USE)
  2114.  
  2115. #define PRINTER_EXECUTE       (STANDARD_RIGHTS_EXECUTE      |\
  2116.                                PRINTER_ACCESS_USE)
  2117.  
  2118. /*
  2119.  * Access rights for jobs
  2120.  */
  2121.  
  2122. #define JOB_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED    |\
  2123.                                 JOB_ACCESS_ADMINISTER)
  2124.  
  2125. #define JOB_READ               (STANDARD_RIGHTS_READ        |\
  2126.                                 JOB_ACCESS_ADMINISTER)
  2127.  
  2128. #define JOB_WRITE              (STANDARD_RIGHTS_WRITE       |\
  2129.                                 JOB_ACCESS_ADMINISTER)
  2130.  
  2131. #define JOB_EXECUTE            (STANDARD_RIGHTS_EXECUTE     |\
  2132.                                 JOB_ACCESS_ADMINISTER)
  2133.  
  2134.  
  2135. #ifdef __cplusplus
  2136. }
  2137. #endif
  2138.  
  2139. #pragma option pop
  2140. #endif // _WINSPOOL_
  2141.